home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 101 / CD-ROM 101.iso / compl / maya5ple / Install_MayaPLE5_English.exe / Maya / Data1.cab / supportRenderers.mel < prev    next >
Encoding:
Text File  |  2003-07-17  |  9.7 KB  |  338 lines

  1. // Copyright (C) 1997-2002 Alias|Wavefront,
  2. // a division of Silicon Graphics Limited.
  3. //
  4. // The information in this file is provided for the exclusive use of the
  5. // licensees of Alias|Wavefront.  Such users have the right to use, modify,
  6. // and incorporate this code into other products for purposes authorized
  7. // by the Alias|Wavefront license agreement, without fee.
  8. //
  9. // ALIAS|WAVEFRONT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  10. // INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
  11. // EVENT SHALL ALIAS|WAVEFRONT BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  12. // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  13. // DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  14. // TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  15. // PERFORMANCE OF THIS SOFTWARE.
  16. //
  17. //
  18. //  Alias|Wavefront Script File
  19. //  MODIFY THIS AT YOUR OWN RISK
  20. //
  21. //  Creation Date:  May 16, 2002
  22. //
  23. //
  24. // Description:
  25. //
  26. //
  27. //
  28. //
  29.  
  30. global string $updateUIProcs[];
  31. global string $gPreviousRenderer = "";
  32.  
  33.  
  34. // Description: Returns a string identifying the current renderer.
  35. //
  36. global proc string currentRenderer()
  37. {
  38.     // If it is not batch rendering, then we want the
  39.     // defaultRenderGlobals.currentRenderer attribute to be created by
  40.     // either the file open process or at the end of the initial Maya loading
  41.     // process.  So in this case, we don't want to create it in the 
  42.     // currentRenderer() procedure.
  43.     //
  44.     string $curRenderer = "mayaSoftware";
  45.     if(!`attributeExists "currentRenderer" defaultRenderGlobals`) 
  46.     {
  47.         if (!`about -batch`)
  48.         {
  49.             // If the attribute defaultRenderGlobals.currentRenderer does
  50.             // not exist yet, then we use "mayaSoftware" as the current
  51.             // renderer.
  52.             //
  53.             return $curRenderer;
  54.         }
  55.     
  56.         // It is batch renderer, we make sure the currentRenderer
  57.         // attribute is created. 
  58.         initCurrentRendererDynamicAttr();
  59.     }
  60.     $curRenderer = `getAttr defaultRenderGlobals.currentRenderer`;
  61.  
  62.     return $curRenderer;
  63.  
  64. }
  65.  
  66.  
  67. // Description: Sets the currentRenderer attribute to the specified renderer.
  68. //
  69. global proc int setCurrentRenderer(string $renderer)
  70. {
  71.  
  72.     assertIsValidRenderer($renderer);
  73.  
  74.     // Matched. Set attribute and return success
  75.     setAttr "defaultRenderGlobals.currentRenderer" -type "string" $renderer;
  76.     return 1;
  77.  
  78.  
  79. }
  80.  
  81. //
  82. // Description: checks if the currentRenderer exists. Defaults to "mayaSoftware" if it
  83. //                 does not
  84. //
  85.  
  86. global proc initCurrentRendererDynamicAttr()
  87. {
  88.     global string $gPreviousRenderer;
  89.  
  90.     // Check if currentRenderer attribute exists in defaultRenderGlobals
  91.     //
  92.     if(!`attributeExists "currentRenderer" defaultRenderGlobals`) {
  93.  
  94.         // Remember if defaultRenderGlobal node is clean or not before
  95.         // the creation and initilization of the currentRenderer dynamic
  96.         // attribute.
  97.         //
  98.         int $defaultRenderGlobalChangedFlag = 
  99.             `checkDefaultRenderGlobals -q -changed`; 
  100.  
  101.         // Add the dynamic attribute defaultRenderGlobals.currentRenderer.
  102.         //
  103.         addAttr -ln currentRenderer -dt "string" defaultRenderGlobals;
  104.  
  105.         // Set the current renderer to be the preferred renderer (as specified
  106.         // by the user via the Preferences window), so long as that renderer is
  107.         // actually available. If the preferred renderer is not available or
  108.         // not specified, the Maya Software renderer will be used instead.
  109.         //
  110.         string $renderer = "mayaSoftware";
  111.  
  112.         if (`optionVar -exists preferredRenderer`)
  113.         {
  114.             string $prefRenderer;
  115.             $prefRenderer = `optionVar -query preferredRenderer`;
  116.             
  117.             if (`renderer -exists $prefRenderer`)
  118.             {
  119.                 // A preferred renderer has been specified by the user and is
  120.                 // available, so we will make it the current renderer.
  121.                 //
  122.                 $renderer = $prefRenderer;
  123.             }
  124.             else
  125.             {
  126.                 warning(
  127.                     "The preferred renderer, " 
  128.                     + $prefRenderer 
  129.                     + ", is not currently available. "
  130.                     + "The Maya Software renderer will be used instead.");
  131.             }
  132.         }
  133.  
  134.         // Set the current renderer to the renderer determined above.
  135.         //
  136.         setAttr 
  137.             "defaultRenderGlobals.currentRenderer" 
  138.             -type "string" 
  139.             $renderer;
  140.  
  141.         // Initialize the previous renderer
  142.         //
  143.         $gPreviousRenderer = $renderer;
  144.  
  145.         // Set the clean-ness of the defaultRenderGlobals node back to
  146.         // the state it was in before we created and initiliazed the
  147.         // defaultRenderGlobals.currentRenderer dynamic attribute.
  148.         // 
  149.         checkDefaultRenderGlobals -changed $defaultRenderGlobalChangedFlag;
  150.     }
  151.  
  152.     // Verify that the current renderer is actually available.
  153.     // It is possible that we have loaded a new scene in which the current
  154.     // renderer was set to some renderer which is no longer available.
  155.     //
  156.     string $currentRenderer = `getAttr defaultRenderGlobals.currentRenderer`;
  157.  
  158.     if (!`renderer -exists $currentRenderer`)
  159.     {
  160.         warning(
  161.             "The renderer, " 
  162.             + $currentRenderer 
  163.             + ", used by this scene, is not currently available. "
  164.             + "The Maya Software renderer will be used instead.");
  165.         setAttr 
  166.             "defaultRenderGlobals.currentRenderer" 
  167.             -type "string" 
  168.             "mayaSoftware";
  169.  
  170.         // Initialize the previous renderer
  171.         //
  172.         $gPreviousRenderer = "mayaSoftware";
  173.     }
  174. }
  175.  
  176. // Description: called when the currentRenderer attribute is changed
  177. //                All render related UI changes are done here
  178. //
  179. global proc int rendererChanged()
  180. {
  181.     global string $gPreviousRenderer;
  182.  
  183.     if (!`about -batch`)
  184.     {
  185.         if ($gPreviousRenderer != "" && $gPreviousRenderer != currentRenderer())
  186.         {
  187.             // Copy settings from one renderer's render globals to the next.
  188.             //
  189.             copyCommonRenderGlobals($gPreviousRenderer, currentRenderer());
  190.         }
  191.     
  192.         if ((currentRenderer() == "mayaHardware") && 
  193.             (! `hwRender -q -limitedRenderSupport`))
  194.         {
  195.             warning "Graphics card capabilities are insufficient for Harware rendering on this machine.";
  196.         }
  197.         // Do additional UI changes here
  198.         //
  199.         updateRendererUI();
  200.     }
  201.  
  202.     $gPreviousRenderer = currentRenderer();
  203.  
  204.     return 1;
  205. }
  206.  
  207. //Description: Used to register an update UI procedure (a proc that updates any 
  208. //               renderer specific UI created in that script)
  209. //Returns:       None
  210. //
  211. global proc registerUpdateRendererUIProc(string $procName)
  212. {
  213.     global string $updateUIProcs[];
  214.     
  215.     int $lastIdx = size($updateUIProcs);
  216.     $updateUIProcs[$lastIdx] = $procName;
  217.  
  218. }
  219.  
  220.  
  221. // Description: Calls procedures within the UI modules to update their respective
  222. //                renderer related UI
  223. //
  224. global proc updateRendererUI()
  225. {
  226.     // We only update the UI if it actually exists. If we are in batch
  227.     // mode, the UI does not exist.
  228.     //
  229.     if (!`about -batch`)
  230.     {
  231.         global string $updateUIProcs[];
  232.  
  233.         for ($i = 0; $i < size($updateUIProcs); $i++)
  234.         {
  235.             eval $updateUIProcs[$i];
  236.         }
  237.     }
  238. }
  239.  
  240. // Description: raises an error if the renderer specified does not exists
  241. //
  242. global proc assertIsValidRenderer(string $renderer)
  243. {
  244.     if(!`renderer -exists $renderer`)
  245.     {
  246.           error     -showLineNumber    true
  247.                         ("Renderer " + $renderer
  248.                         + " is not valid");
  249.     }
  250. }
  251.  
  252. global proc rendererSceneOpenedCallback()
  253. {
  254.     //
  255.     // Description:
  256.     //    This procedure is called when a scene is opened (which also happens on
  257.     //    File->New).
  258.     //    This procedure calls procedures which initialize the current renderer
  259.     //    attribute and refresh rendering related UI correspondingly.
  260.     //
  261.  
  262.     // Cause the currentRenderer attribute of the defaultRenderGlobals node
  263.     // to be created.
  264.     //
  265.     initCurrentRendererDynamicAttr();
  266.  
  267.     // Set up a scriptJob to react when the value of the
  268.     // attribute changes.
  269.     //
  270.     scriptJob 
  271.         -killWithScene
  272.         -attributeChange 
  273.             "defaultRenderGlobals.currentRenderer" 
  274.             "rendererChanged;";
  275.  
  276.     // Call the rendererChanged() procedure explicitly since the
  277.     // initCurrentRendererDynamicAttr() procedure call above may have changed
  278.     // the current renderer.
  279.     //
  280.     rendererChanged();
  281. }
  282.  
  283. //
  284. // Description: Called when a selection is made in the current renderer option 
  285. // menu. Sets the current renderer.
  286. //
  287. // Returns: None
  288. //
  289. global proc updateCurrentRendererSel(string $menu)
  290. {
  291.     string $selRenderer = `optionMenu -query -value $menu`;
  292.     string $renderers[] = `renderer -query -namesOfAvailableRenderers`; 
  293.     string $rendererUIName = "";        
  294.  
  295.     for ($i = 0; $i < size($renderers); $i += 1)
  296.     {
  297.         $rendererUIName = `renderer -query -rendererUIName $renderers[$i]`;
  298.         if($selRenderer == $rendererUIName)
  299.             break;
  300.     }
  301.  
  302.     // If the select renderer is not installed, produce error
  303.     //
  304.     if($i == size($renderers))
  305.     {
  306.         error     -showLineNumber    true
  307.                    ($rendererUIName + " does not exist ");
  308.     }
  309.     else
  310.     {
  311.         setCurrentRenderer($renderers[$i]);
  312.     }
  313. }
  314.  
  315. // Description:  This procedure is called to initialize the
  316. //  defaultRenderGlobals.currentRenderer dynamic attribute if it does
  317. //  not exist yet, and set up callbacks for renderer related actions
  318. //  which need to be executed during SceneOpened.
  319. // 
  320. global proc setupRendererSceneOpenedCallback()
  321. {
  322.     // Create the defaultRenderGlobals.currentRenderer dynamic attribute 
  323.     // if it does not exist yet.
  324.     //
  325.     initCurrentRendererDynamicAttr();
  326.  
  327.     // Invoke the scene opened callback explicitly, since the event has already
  328.     // occurred by the time this script is sourced during Maya startup. We want
  329.     // everything that procedure does to also happen during startup.
  330.     //
  331.     evalDeferred rendererSceneOpenedCallback;
  332.     
  333.     // Set up a script job to call the scene opened callback whenever a new scene
  334.     // is opened.
  335.     //
  336.     evalDeferred "scriptJob -event SceneOpened rendererSceneOpenedCallback;";
  337. }
  338.